package com.atguigu.teach.mytask;

import com.atguigu.teach.juc.CountDownLatchDemo;

import java.util.concurrent.CountDownLatch;

public class MyCountLatchDemo {
    /**
     * @name:
     * @params:
     * @description:
     * 题目如下：第一个线程协同干活，要求到最后一个线程为零后，才能启动主线程
     * 做一个减少一个，清零后才能启动主线程，逐个做减法
     *
     * 两方法，当一个或多个线程调用await方法时，这些线程会阻塞。
     * 其他线程调用countdown方法计数器会减一（调用countDown方法的线程不会阻塞）
     * 当计数器的值变为0时，因await方法阻塞的线程会被唤醒，继续执行
     * @return:
     * @exception/throws:
     * @author: zxb
     * @date:   2021/10/23
     */
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch=new CountDownLatch(6);

        for (int i = 1; i <=6 ; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"\t"+"----结束晚自习");
                //计数器减一
                countDownLatch.countDown();
            },String.valueOf(i)).start();
        }
        //当计数器变成0后，就放行
        countDownLatch.await();
        System.out.println(Thread.currentThread().getName()+"\t"+"-------关门走人");
    }
}
